#ifndef SHELLSORT_H_INCLUDED
#define SHELLSORT_H_INCLUDED

void shellSort_shell(int*vet, int n){
    int i , j , h;
    int aux;
    h = n;
    do{
        h /= 2;
        for(i = h; i < n; i++){
            aux = vet[i];
            // copia o elemento a ser inserido
            j = i -h;
            while((j >= 0) && (aux < vet[j])){
                vet[j+h] = vet[j];
                // desloca o elemento na subsequencia
                j -= h;
            }
            vet[j+h] = aux;
            // insere o elemento
        }
    } while(h!=1);
}

void shellSort_knuth(int*vet, int n){
    int i , j , h;
    int aux;
    h = 1;
    do{
        h = 3*h + 1;
    } while(h<n);
    // determina o valor inicial de h
    do{
        h /= 3;
        for(i = h; i < n; i++){
            aux = vet[i];
            // copia o elemento a ser inserido
            j = i -h;
            while((j >= 0) && (aux < vet[j])){
                vet[j+h] = vet[j];
                // desloca o elemento na subsequencia
                j -= h;
            }
            vet[j+h] = aux;
            // insere o elemento
        }
    } while(h!=1);
}



#endif // SHELLSORT_H_INCLUDED
